package com.quicks.beauty.server.config;

import com.quicks.beauty.core.entity.UserOrder;
import com.quicks.beauty.server.service.OrderService;
import com.quicks.beauty.server.service.UserBillService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.stereotype.Component;

import java.io.UnsupportedEncodingException;

/**
 * 为了接收 Redis 渠道发送过来的消息，我们先定义一个消息监听器（ MessageListener ），代码
 */
@Component
public class RedisSubscribe implements MessageListener {


    @Autowired
    private UserBillService userBillService;
    @Autowired
    private OrderService orderService;


    /**
     * 这里的 onMessage 方法是得到消息后的处理方法， 其中 message 参数代表 Redis 发送过来的消息，
     * pattern是渠道名称，onMessage方法里打印 了它们的内容。这里因为标注了 ＠Component 注解，所以
     * 在 Spring Boot 扫描后，会把它自动装配到 IoC 容器中 ,监听着对象RedisMessageListener会自动
     * 将消息进行转换。
     *
     * @param message
     * @param pattern
     */
    @Override
    public void onMessage(Message message, byte[] pattern) {
        try {
            //消息体
            String body = new String(message.getBody(), "utf-8");
            //渠道名称
            String topic = new String(pattern);
            byte[] body1 = message.getBody();
            System.out.println("消息体：" + body);
            System.out.println("渠道名称：" + topic);

            if (topic.equals("bill")) {
                String[] msg = body.split("\\|");
                String userId = msg[0];
                String orderId = msg[1];
                userBillService.sendMailMsg(userId,orderId);

            }

            if (topic.equals("order")) {
                String[] msg = body.split("\\|");
                String userId = msg[0];
                String orderId = msg[1];
                userBillService.sendMailMsg1(userId,orderId);
            }

                String[] msg = body.split("\\&");
                if(msg.length>1){
                    String orderId = msg[0];
                    String  userId = msg[1];
                    orderService.expirePoints(userId,orderId);
                }


        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }


}